package imai78gae.heya.util;

import java.io.File;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * チェック処理を行う為の判定処理を集約したユーティリティです。
 * 
 * @author imai78
 *
 */
public class CheckUtil {

	/**
	 * {@link String}の引数{@code param}が{@code null}または空文字の場合、{@code true}を返します。
	 * <p>
	 * {@code param}の前後に存在するスペースは{@link String#trim()}によって削除された上で判定されます。
	 * <br />
	 * 全角スペースも同様に削除された上で判定されます。
	 * </p>
	 * 
	 * @param param チェックしたい文字列
	 * @return チェック結果
	 */
	public static boolean isEmpty(String param) {
		if (param == null)
			return true;
		if (param.replaceAll("^　.*||.*　$", " ").trim().length() == 0)
			return true;
		return false;
	}

	/**
	 * {@link Map}の引数{@code param}が{@code null}かどうかを判定し、{@code null}の場合は{@code true}を返します。
	 * {@link Map#isEmpty()}が{@code true}を返す場合も同様に{@code true}を返します。
	 * 
	 * @param param チェックしたい{@link Map}
	 * @return チェック結果
	 */
	public static boolean isEmpty(Map<?, ?> param) {
		if (param == null)
			return true;
		return param.isEmpty();
	}

	/**
	 * メールアドレスの書式を表現する{@link Pattern}です。
	 */
	static final Pattern MAILADDRESS_PATTERN = Pattern.compile("[\\w\\.\\-]+@(?:[\\w\\-]+\\.)+[\\w\\-]+");

	/**
	 * {@link String}の引数{@code address}がメールアドレスとして適切な書式の文字列かどうかを判定し、適切である場合は{@code true}を返します。
	 * 
	 * @param address チェックしたいメールアドレス
	 * @return チェック結果
	 */
	public static boolean isMailAddress(String address) {
		if (isEmpty(address)) {
			return false;
		}
		Matcher matcher = MAILADDRESS_PATTERN.matcher(address);
		if (matcher.find())
			return true;
		return false;
	}

	/**
	 * {@link String}の引数{@code filePath}で指定されたファイルが存在するかどうかを判定し、存在する場合は{@code true}を返します。
	 * 
	 * @param filePath 判定したいファイルぱす
	 * @return チェック結果
	 */
	public static boolean isExistFile(String filePath) {
		if (isEmpty(filePath))
			return false;
		return new File(filePath).exists();
	}

}
